/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package blancanieves.back;

import java.util.Stack;

/**
 *
 * @author pabloramix
 */
public class Sitio {

    private Stack<String> plato;
    private Enanito enanito;
    private boolean servido;
    
    public Sitio(Enanito e) {

        plato = new Stack<>();
        enanito = e;
        servido = false;

    }

    public synchronized void comer() throws InterruptedException {

        Enanito e;
        Thread currentThread = Thread.currentThread();

        if (currentThread instanceof Enanito) {
            e = (Enanito) currentThread;
        } else {
            throw new RuntimeException("No puede comer nadie que no sea un enanito la comida de Blancanieves");
        }

        while (plato.isEmpty()) {
            System.out.println("<" + e.getNombre() + "> Esperando a que le llenen el plato.");
            wait();
        }

        System.out.println("<" + e.getNombre() + "> Que buena pinta");

        int tam = plato.size();
        int cont = 0;

        while (!plato.isEmpty()) {
            plato.pop();
            cont++;
            e.setProgreso(Math.round(100 * cont / tam));
            Thread.sleep(e.obtenerPrioridadReal(e.getPrioridadComer()));
        }

        System.out.println("<" + e.getNombre() + "> Ya he terminado, ahora un cafecito.");
    }

    public synchronized void servir() throws InterruptedException {

        Thread currentThread = Thread.currentThread();
        Blancanieves b = null;

        if (currentThread instanceof Blancanieves) {

            b = (Blancanieves) currentThread;

            if (plato != null && plato.isEmpty()) {

                System.out.println("<Blancanieves> " + getEnanito().getNombre() + ", hoy hay lentejas, para que crezcas");

                for (int i = 0; i < 1000; i++) {
                    plato.push("Lentejas");
                    b.setProgreso(Math.round(i / 10));
                    Thread.sleep(5);
                }

                servido = true;
                notifyAll();
            
            } else if (plato != null) {
                System.out.println("<Blancanieves> El enanito " + getEnanito().getNombre() + " ya está comiendo");
            }
            
        } else {
            throw new RuntimeException("No puede servir comida a los enanitos nadie que no sea Blancanieves");
        }

    }

    /**
     * @return the enanito
     */
    public Enanito getEnanito() {
        return enanito;
    }

    /**
     * @param enanito the enanito to set
     */
    public void setEnanito(Enanito enanito) {
        this.enanito = enanito;
    }
    
    public boolean getservido() {
        return servido;
    }
}
